#if !defined(_PcscPlugin_H)
#define _PcscPlugin_H

#include <scott/Plugin.h>
#include <winscard.h>
#include <iostream>

CREATE_ALIAS( PcscPlugin );

class DECLARATION_DLL PcscPlugin :	public Plugin
{
	// Useful file descriptors references
	SVectorTypeDescriptorSp	BufferTd;
	SEnumTypeDescriptorSp	DispositionTd;
	SEnumTypeDescriptorSp	ErrorTd;
	SEnumTypeDescriptorSp	ProtocolTd;
	SEnumTypeDescriptorSp	ScopeTd;
	SEnumTypeDescriptorSp	SharemodeTd;
	SEnumTypeDescriptorSp	StateTd;
	SVectorTypeDescriptorSp	VstringTd;

	// Enumerators default values
	string ErrorDefault;
	string ProtocolDefault;
	string StateDefault;

public:

	PcscPlugin();

	virtual void InitializePlugin(PluginSpMapSp plugins, INameResolutorSp nameResolutor);

	virtual void ExecuteCommand(CommandSp command);

	// Plugin Command Handler Declarations
	virtual void Pcsc_Connect();
	virtual void Pcsc_Disconnect();
	virtual void Pcsc_EstablishContext();
	virtual void Pcsc_ListReaders();
	virtual void Pcsc_ReleaseContext();
	virtual void Pcsc_Status();
	virtual void Pcsc_Transmit();

	// Methods to set enumerators
	virtual void SetError(string outputParameterName, string enumValue);
	virtual void SetError(string outputParameterName, unsigned long enumNumericValue);
	virtual void SetProtocol(string outputParameterName, string enumValue);
	virtual void SetProtocol(string outputParameterName, unsigned long enumNumericValue);
	virtual void SetState(string outputParameterName, string enumValue);
	virtual void SetState(string outputParameterName, unsigned long enumNumericValue);
};

#endif  // _PcscPlugin_H

